package com.lx.crm.repository;

import com.lx.crm.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface UserRepository extends JpaRepository<User,Long>, JpaSpecificationExecutor {

    List<User> findByUserNameLike(String s);

    @Query("select u from User u where u.userRoleId=?1")
    List<User> findByUserRoleId(Long roleId);

    //如果想使用原生SQL而非HQL，则需要添加 nativeQuery = true
    //参数?1代表方法中的参数列表的第一个参数，也可以用:userName表示，但是需要在参数列表的参数前添加@Param("userName")
    @Query(value = "select * from sys_user where user_name=?1",nativeQuery = true)
    List<User> findByUserName(String userName);

    //如果涉及到删除和修改需要加上@Modifying，也可以根据需要添加@Transactional对事务的支持、操作超时设置等
    @Transactional(timeout = 10)
    @Modifying
    @Query("update User u set u.userName=?1 where u.userId=?2")
    int modifyNameById(String userName,Long userId);

    //此方法对应User实体类中的命名查询
    //如果希望根据接口方法名来实现数据库操作，则应命名为：findUsersByName
    List<User> findUsersByName(String userName);

    @Query("select u from User u where u.userRoleId=?1")
    Page<User> findPageByUserRoleId(Long roleId, Pageable pageable);
}
